import requests import pandas as pd import numpy as np import matplotlib.pyplot as plt
# URL для API MOEX, данные по ZCYC (zero coupon yield curve) url = "https://iss.moex.com/iss/engines/stock/zcyc/securities.json" # Запрос на получение данных response = requests.get(url) data = response.json() # Извлекаем данные из секции 'params' columns = data['params']['columns'] values = data['params']['data'] # Преобразуем в DataFrame df = pd.DataFrame(values, columns=columns) # Выбираем нужные столбцы: B1, B2, B3, T1, G1, ..., G9 df_selected = df[['tradedate', 'tradetime', 'B1', 'B2', 'B3', 'T1', 'G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9']] # Извлекаем параметры для функции GT из df_selected beta0 = df_selected['B1'].values[0] beta1 = df_selected['B2'].values[0] beta2 = df_selected['B3'].values[0] tau = df_selected['T1'].values[0] g_values = df_selected[['G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9']].values[0].tolist()
II. В реальности форма кривой не остается постоянной с течением времени.
Если исключить премию за срок до погашения, то сам факт наклона кривой доходности будет говорить о том, что инвесторы ожидают изменения спотовых ставок в будущем. Мы отмечали это в прошлой части, когда обсуждали гипотезу чистых ожиданий.
В этой связи перед держателем облигации встают следующие задачи:
Горизонт инвестирования имеет существенное значение. Инвестору, планирующему продать облигацию через месяц-другой, не нужно размышлять над проблемой реинвестирования купонов, для него важен неблагоприятный ценовой (рыночный) риск т.е. снижение стоимости облигации, вызванное ростом ставок. А если государственная облигация удерживается до погашения, то, наоборот, риск реинвестирования становится главным фактором. Этот риск является асимметричным и связан с возможным снижением ставок, т.е. необходимостью реинвестировать купоны под более низкий процент. В результате инвестор получит меньшую будущую стоимость (или общий денежный доход). Риск реинвестирования тем выше, чем больше
Как мы заметили в ч. 2., несмотря на разнообразие форм, в литературе выделяют определенную типологию и динамику кривых доходности.
Также существует несколько устойчивых наблюдений, которые должна объяснять любая содержательная теория срочной структуры процентных ставок.
Одной из первых и наиболее представительной теорий временной структуры является гипотеза ожиданий. Она подразделяется на несколько ветвей. Две основные: гипотеза чистых ожиданий (pure (or unbiased) expectation hypothesis) и гипотеза локальных ожиданий (local expectation hypothesis); две вспомогательные: return to maturity expectation hypothesis, yield to maturity expectation hypothesis
Ранее мы предполагали, что рыночные ставки плоские, поэтому дисконтировали денежные потоки по облигации с помощью единой ставки — доходности к погашению (YTM). Однако наблюдаемые на рынке доходности государственных облигаций на самом деле зависят от срока до погашения. Графически эта зависимость представляется в виде так называемой кривой доходности или yield curve. Если для построения использовать только что выпущенные облигации, торгующиеся, как правило, возле номинала, получим кривую номинальной доходности (par yield curve) Ее очень удобно интерпретировать, так как в этом случае купонные доходности равны доходностям к погашению. Впрочем, на низколиквидном рынке подобные облигации для всех сроков до погашения удается найти далеко не всегда.
Возникает вопрос, можно ли использовать эти кривые для оценки вновь выпускаемых облигаций? Рассмотрим модельный пример, когда на рынке есть только две облигации с ежегодной выплатой купона торгующиеся по номиналу (100): годовая с купоном 3% и двухлетняя с купоном 6%. Пока мы не будем вдаваться в детали возможных причин различий их доходностей. Если на этом рынке появится еще одна двухлетняя облигация, но уже с купоном 9%, следует ли для расчета ее цены использовать нашу ‘двухлетнюю’ YTM, т.е. ставку 6% ? Тогда бы мы получили цену облигации
P = 9/(1+6%) +109/(1+6%)2 = 105.5. Или, быть может, первый купонный платеж необходимо дисконтировать, используя YTM=3%, и только выплаты второго года по ставке 6% (цена будет равной P = 9/(1+3%) +109/(1+6%)